const wx2my = require('../../../wx2my');
const Behavior = require('../../../Behavior');
var _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
  return typeof e;
} : function (e) {
  return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
};

function _defineProperty(e, t, n) {
  console.log('_defineProperty.............')
  console.log(e)
  return t in e ? Object.defineProperty(e, t, {
    value: n,
    enumerable: !0,
    configurable: !0,
    writable: !0
  }) : e[t] = n, e;
}

var util = {}; // 获取get url后的参数

function getQuery(e) {
  var t = [];
  if (-1 != e.indexOf("?")) for (var n = e.split("?")[1].split("&"), a = 0; a < n.length; a++) n[a].split("=")[0] && unescape(n[a].split("=")[1]) && (t[a] = {
    name: n[a].split("=")[0],
    value: unescape(n[a].split("=")[1])
  });
  return t;
} // 获取post url后的参数


function getUrlParam(e, t) {
  var n = new RegExp("(^|&)" + t + "=([^&]*)(&|$)"),
      a = e.split("?")[1].match(n);
  return null != a ? unescape(a[2]) : null;
}

function getSign(e, t, n) {
  var a = require("./underscore.js"),
      r = require("./md5.js"),
      i = "",
      o = getUrlParam(e, "sign");

  if (o || t && t.sign) return !1;

  if (e && (i = getQuery(e)), t) {
    var s = [];

    for (var u in t) u && t[u] && (s = s.concat({
      name: u,
      value: t[u]
    }));

    i = i.concat(s);
  }

  i = a.sortBy(i, "name"), i = a.uniq(i, !0, "name");

  for (var c = "", g = 0; g < i.length; g++) i[g] && i[g].name && i[g].value && (c += i[g].name + "=" + i[g].value, g < i.length - 1 && (c += "&"));

  return o = r(c + (n = n || getApp().siteInfo.token));
}

util.url = function (e, t) {
  var n = getApp(),
      a = n.siteInfo.siteroot + "?i=" + n.siteInfo.uniacid + "&t=" + n.siteInfo.multiid + "&v=" + n.siteInfo.version + "&from=wxapp&";
  if (e && ((e = e.split("/"))[0] && (a += "c=" + e[0] + "&"), e[1] && (a += "a=" + e[1] + "&"), e[2] && (a += "do=" + e[2] + "&")), t && "object" === (void 0 === t ? "undefined" : _typeof(t))) for (var r in t) r && t.hasOwnProperty(params) && t[r] && (a += r + "=" + t[r] + "&");
  return a;
}, util.request = function (a) {
  var e;
  // .............参数
  console.log(a);

  require("./underscore");

  var t = require("./md5.js"),
      r = getApp();

  (a = a || {}).cachetime = a.cachetime ? a.cachetime : 0;
  // var n = wx2my.getStorageSync("userInfo").sessionid,
  // var n = wx2my.getStorageSync(["userInfo"]).data.sessionid,
  var n = 1;
     var i = a.url;
    //  .........url
  console.log(i);
  if (-1 == i.indexOf("http://") && -1 == i.indexOf("https://") && (i = util.url(i)), getUrlParam(i, "state") || a.data && a.data.state || !n || (i = i + "&state=we7sid-" + n), !a.data || !a.data.m) {
    var o = getCurrentPages();
    o.length && (o = o[getCurrentPages().length - 1]) && o.__route__ && (i = i + "&m=" + o.__route__.split("/")[0]);
  }
  console.log(a.data)
  var s = getSign(i, a.data);
  console.log(s); //229b398e3b2e5bb4c50b2815963c41bd 有data={type: 4} c07680dd55971f306c0c16d51ef4cfc7
  if (s && (i = i + "&sign=" + s), !i) return !1;

  if (wx2my.showNavigationBarLoading(), a.showLoading && util.showLoading(), a.cachetime) {
    console.log('$$$$$$#####')
    var u = t(i),
        // c = wx2my.getStorageSync(u),
        c = wx2my.getStorageSync([u]).data,
        g = Date.parse(new Date());
  console.log(u)
  console.log(c)
  console.log(g)
    if (c && c.data) {
      if (c.expire > g) return a.complete && "function" == typeof a.complete && a.complete(c), a.success && "function" == typeof a.success && a.success(c), console.log("cache:" + i), wx2my.hideLoading(), wx2my.hideNavigationBarLoading(), !0;
      wx2my.removeStorageSync(u);
    }
  }

  wx2my.request((_defineProperty(e = {
    url: i,
    data: a.data ? a.data : {},
    header: a.header ? a.header : {},
    method: a.method ? a.method : "GET"
  }, "header", {
    "content-type": "application/x-www-form-urlencoded"
  }),
   _defineProperty(e, "success", function (e) {
    if (wx2my.hideNavigationBarLoading(), wx2my.hideLoading(), e.data.errno) {
      if ("41009" == e.data.errno) return wx2my.setStorageSync("userInfo", ""), void util.getUserInfo(function () {
        util.request(a);
      });
      if (a.fail && "function" == typeof a.fail) a.fail(e);else if (e.data.message) {
        if (null != e.data.data && e.data.data.redirect) var t = e.data.data.redirect;else t = "";
        r.util.message(e.data.message, t, "error");
      }
    } else if (a.success && "function" == typeof a.success && a.success(e), a.cachetime) {
      var n = {
        data: e.data,
        expire: g + 1e3 * a.cachetime
      };
      wx2my.setStorageSync(u, n);
    }
  }),
   _defineProperty(e, "fail", function (e) {
    wx2my.hideNavigationBarLoading(), wx2my.hideLoading();

    var t = require("./md5.js")(i),
        n = wx2my.getStorageSync(t);

    if (n && n.data) return a.success && "function" == typeof a.success && a.success(n), console.log("failreadcache:" + i), !0;
    a.fail && "function" == typeof a.fail && a.fail(e);
  }),
   _defineProperty(e, "complete", function (e) {
    a.complete && "function" == typeof a.complete && a.complete(e);
  }), e));
}, 
util.getUserInfo = function (n) {
  var e = function () {
    console.log("start login");
    var t = {
      sessionid: "",
      wxInfo: "",
      memberInfo: ""
    };
    wx.login({
      success: function (e) {
        console.log(e), util.request({
          url: "auth/session/openid",
          data: {
            code: e.code
          },
          cachetime: 0,
          success: function (e) {
            console.log(e), e.data.errno || (t.sessionid = e.data.data.sessionid, wx2my.setStorageSync("userInfo", t), wx.getUserInfo({
              success: function (e) {
                t.wxInfo = e.userInfo, console.log(t), wx2my.setStorageSync("userInfo", t), util.request({
                  url: "auth/session/userinfo",
                  data: {
                    signature: e.signature,
                    rawData: e.rawData,
                    iv: e.iv,
                    encryptedData: e.encryptedData
                  },
                  method: "POST",
                  header: {
                    "content-type": "application/x-www-form-urlencoded"
                  },
                  cachetime: 0,
                  success: function (e) {
                    console.log(e);
                    e.data.errno || (t.memberInfo = e.data.data, wx2my.setStorageSync("userInfo", t)), "function" == typeof n && n(t);
                  }
                });
              },
              fail: function () {},
              complete: function () {}
            }));
          }
        });
      },
      fail: function () {
        wx2my.showModal({
          title: "获取信息失败",
          content: "请允许授权以便为您提供给服务",
          success: function (e) {
            e.confirm && util.getUserInfo();
          }
        });
      }
    });
  },
      t = wx2my.getStorageSync("userInfo");

  t.sessionid ? wx.checkSession({
    success: function () {
      "function" == typeof n && n(t);
    },
    fail: function () {
      t.sessionid = "", console.log("relogin"), wx2my.removeStorageSync("userInfo"), e();
    }
  }) : e();
}, util.navigateBack = function (t) {
  var e = t.delta ? t.delta : 1;

  if (t.data) {
    var n = getCurrentPages(),
        a = n[n.length - (e + 1)];
    a.pageForResult ? a.pageForResult(t.data) : a.setData(t.data);
  }

  wx2my.navigateBack({
    delta: e,
    success: function (e) {
      "function" == typeof t.success && t.success(e);
    },
    fail: function (e) {
      "function" == typeof t.fail && t.function(e);
    },
    complete: function () {
      "function" == typeof t.complete && t.complete();
    }
  });
}, util.footer = function (e) {
  var t = e,
      n = getApp().tabBar;

  for (var a in n.list) n.list[a].pageUrl = n.list[a].pagePath.replace(/(\?|#)[^"]*/g, "");

  t.setData({
    tabBar: n,
    "tabBar.thisurl": t.__route__
  });
}, util.message = function (e, t, n) {
  if (!e) return !0;

  if ("object" == (void 0 === e ? "undefined" : _typeof(e)) && (t = e.redirect, n = e.type, e = e.title), t) {
    var a = t.substring(0, 9),
        r = "",
        i = "";
    "navigate:" == a ? (i = "navigateTo", r = t.substring(9)) : "redirect:" == a ? (i = "redirectTo", r = t.substring(9)) : (r = t, i = "redirectTo");
  }

  n || (n = "success"), "success" == n ? wx2my.showToast({
    title: e,
    icon: "success",
    duration: 2e3,
    mask: !!r,
    complete: function () {
      r && setTimeout(function () {
        wx[i]({
          url: r
        });
      }, 1800);
    }
  }) : "error" == n;
}, util.user = util.getUserInfo, util.showLoading = function () {
  wx2my.getStorageSync("isShowLoading") && (wx2my.hideLoading(), wx2my.setStorageSync("isShowLoading", !1)), wx2my.showLoading({
    title: "正在加载",
    complete: function () {
      wx2my.setStorageSync("isShowLoading", !0);
    },
    fail: function () {
      wx2my.setStorageSync("isShowLoading", !1);
    }
  });
}, util.showImage = function (e) {
  var t = e ? e.currentTarget.dataset.preview : "";
  if (!t) return !1;
  wx2my.previewImage({
    urls: [t]
  });
}, util.compare = function (e, t) {
  return (e = Number(e.tel)) < (t = Number(t.tel)) ? -1 : t < e ? 1 : 0;
}, util.time = function () {
  var e = new Date(),
      t = e.getFullYear(),
      n = e.getMonth() + 1,
      a = e.getDate();
  return 1 <= n && n <= 9 && (n = "0" + n), 0 <= a && a <= 9 && (a = "0" + a), t + "-" + n + "-" + a;
}, util.location = function (e, t, n, a) {
  var r = e * Math.PI / 180,
      i = t * Math.PI / 180,
      o = r - i,
      s = n * Math.PI / 180 - a * Math.PI / 180,
      u = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(o / 2), 2) + Math.cos(r) * Math.cos(i) * Math.pow(Math.sin(s / 2), 2)));
  return u *= 6378.137, u = (u = Math.round(1e4 * u) / 1e4).toFixed(2);
}, util.day = function (e, t) {
  e = e, t = t;
  return ((e = Date.parse(e) / 1e3) - (t = Date.parse(t) / 1e3)) / 86400;
}, util.addDate = function (e, t) {
  var n = new Date(e);
  n.setDate(n.getDate() + t);
  var a = n.getMonth() + 1,
      r = n.getDate();
  return a < 10 && (a = "0" + a), r < 10 && (r = "0" + r), n.getFullYear() + "-" + a + "-" + r;
}, util.price = function (e) {
  var n = [];
  return e.map(function (e) {
    var t = {};
    t.a = e.online_price, t.b = e.original_price, n.push(t);
  }), n;
}, util.compare = function (e) {
  var t = e.a,
      n = e.b;
  return t < n ? -1 : n < t ? 1 : 0;
}, util.parseContent = function (e) {
  if (!e) return e;
  var t = e.match(new RegExp(["\ud83c[\udf00-\udfff]", "\ud83d[\udc00-\ude4f]", "\ud83d[\ude80-\udeff]"].join("|"), "g"));
  if (t) for (var n in t) e = e.replace(t[n], "[U+" + t[n].codePointAt(0).toString(16).toUpperCase() + "]");
  return e;
}, util.date = function () {
  this.isLeapYear = function (e) {
    return 0 == e.getYear() % 4 && (e.getYear() % 100 != 0 || e.getYear() % 400 == 0);
  }, this.dateToStr = function (e, t) {
    e = e || "yyyy-MM-dd HH:mm:ss", t = t || new Date();
    var n = e;
    return n = (n = (n = (n = (n = (n = (n = (n = (n = (n = (n = (n = (n = n.replace(/yyyy|YYYY/, t.getFullYear())).replace(/yy|YY/, 9 < t.getYear() % 100 ? (t.getYear() % 100).toString() : "0" + t.getYear() % 100)).replace(/MM/, 9 < t.getMonth() ? t.getMonth() + 1 : "0" + (t.getMonth() + 1))).replace(/M/g, t.getMonth())).replace(/w|W/g, ["日", "一", "二", "三", "四", "五", "六"][t.getDay()])).replace(/dd|DD/, 9 < t.getDate() ? t.getDate().toString() : "0" + t.getDate())).replace(/d|D/g, t.getDate())).replace(/hh|HH/, 9 < t.getHours() ? t.getHours().toString() : "0" + t.getHours())).replace(/h|H/g, t.getHours())).replace(/mm/, 9 < t.getMinutes() ? t.getMinutes().toString() : "0" + t.getMinutes())).replace(/m/g, t.getMinutes())).replace(/ss|SS/, 9 < t.getSeconds() ? t.getSeconds().toString() : "0" + t.getSeconds())).replace(/s|S/g, t.getSeconds());
  }, this.dateAdd = function (e, t, n) {
    switch (n = n || new Date(), e) {
      case "s":
        return new Date(n.getTime() + 1e3 * t);

      case "n":
        return new Date(n.getTime() + 6e4 * t);

      case "h":
        return new Date(n.getTime() + 36e5 * t);

      case "d":
        return new Date(n.getTime() + 864e5 * t);

      case "w":
        return new Date(n.getTime() + 6048e5 * t);

      case "m":
        return new Date(n.getFullYear(), n.getMonth() + t, n.getDate(), n.getHours(), n.getMinutes(), n.getSeconds());

      case "y":
        return new Date(n.getFullYear() + t, n.getMonth(), n.getDate(), n.getHours(), n.getMinutes(), n.getSeconds());
    }
  }, this.dateDiff = function (e, t, n) {
    switch (e) {
      case "s":
        return parseInt((n - t) / 1e3);

      case "n":
        return parseInt((n - t) / 6e4);

      case "h":
        return parseInt((n - t) / 36e5);

      case "d":
        return parseInt((n - t) / 864e5);

      case "w":
        return parseInt((n - t) / 6048e5);

      case "m":
        return n.getMonth() + 1 + 12 * (n.getFullYear() - t.getFullYear()) - (t.getMonth() + 1);

      case "y":
        return n.getFullYear() - t.getFullYear();
    }
  }, this.strToDate = function (dateStr) {
    var data = dateStr,
        reCat = /(\d{1,4})/gm,
        t = data.match(reCat);
    return t[1] = t[1] - 1, eval("var d = new Date(" + t.join(",") + ");"), d;
  }, this.strFormatToDate = function (e, t) {
    var n = 0,
        a = -1,
        r = t.length;
    -1 < (a = e.indexOf("yyyy")) && a < r && (n = t.substr(a, 4));
    var i = 0;
    -1 < (a = e.indexOf("MM")) && a < r && (i = parseInt(t.substr(a, 2)) - 1);
    var o = 0;
    -1 < (a = e.indexOf("dd")) && a < r && (o = parseInt(t.substr(a, 2)));
    var s = 0;
    (-1 < (a = e.indexOf("HH")) || 1 < (a = e.indexOf("hh"))) && a < r && (s = parseInt(t.substr(a, 2)));
    var u = 0;
    -1 < (a = e.indexOf("mm")) && a < r && (u = t.substr(a, 2));
    var c = 0;
    return -1 < (a = e.indexOf("ss")) && a < r && (c = t.substr(a, 2)), new Date(n, i, o, s, u, c);
  }, this.dateToLong = function (e) {
    return e.getTime();
  }, this.longToDate = function (e) {
    return new Date(e);
  }, this.isDate = function (e, t) {
    null == t && (t = "yyyyMMdd");
    var n = t.indexOf("yyyy");
    if (-1 == n) return !1;
    var a = e.substring(n, n + 4),
        r = t.indexOf("MM");
    if (-1 == r) return !1;
    var i = e.substring(r, r + 2),
        o = t.indexOf("dd");
    if (-1 == o) return !1;
    var s = e.substring(o, o + 2);
    return !(!isNumber(a) || "2100" < a || a < "1900") && !(!isNumber(i) || "12" < i || i < "01") && !(s > getMaxDay(a, i) || s < "01");
  }, this.getMaxDay = function (e, t) {
    return 4 == t || 6 == t || 9 == t || 11 == t ? "30" : 2 == t ? e % 4 == 0 && e % 100 != 0 || e % 400 == 0 ? "29" : "28" : "31";
  }, this.isNumber = function (e) {
    return /^\d+$/g.test(e);
  }, this.toArray = function (e) {
    e = e || new Date();
    var t = Array();
    return t[0] = e.getFullYear(), t[1] = e.getMonth(), t[2] = e.getDate(), t[3] = e.getHours(), t[4] = e.getMinutes(), t[5] = e.getSeconds(), t;
  }, this.datePart = function (e, t) {
    t = t || new Date();
    var n = "";

    switch (e) {
      case "y":
        n = t.getFullYear();
        break;

      case "M":
        n = t.getMonth() + 1;
        break;

      case "d":
        n = t.getDate();
        break;

      case "w":
        n = ["日", "一", "二", "三", "四", "五", "六"][t.getDay()];
        break;

      case "ww":
        n = t.WeekNumOfYear();
        break;

      case "h":
        n = t.getHours();
        break;

      case "m":
        n = t.getMinutes();
        break;

      case "s":
        n = t.getSeconds();
    }

    return n;
  }, this.maxDayOfDate = function (e) {
    (e = e || new Date()).setDate(1), e.setMonth(e.getMonth() + 1);
    var t = e.getTime() - 864e5;
    return new Date(t).getDate();
  };
}, module.exports = util;